home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ShareWare OnLine 2
/
ShareWare OnLine Volume 2 (CMS Software)(1993).iso
/
bbsdoors
/
wwmail44.zip
/
USERREC.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-31
|
8KB
|
226 lines
#include "userrec.h"
// set-up the stack
extern unsigned _stklen = 128000U;
extern configrec syscfg; // holds info from config.dat
extern mailu u; // holds mailu
extern int local, // flag for local usage
ansi, // flag for ansi usage
nowrite, // write user files ?
logoff, // should the door logoff
import, // flag for import mode
export; // flag for export mode
static userrec user; // your userrec
//===================================================================
void convert_to()
{
// transfers your userrec info into my mailu structure
strcpy(u.name, user.name);
u.screenlines = user.screenlines;
u.sl = user.sl;
u.dsl = user.dsl;
u.waiting = user.waiting;
u.age = user.age;
u.ar = user.ar;
u.dar = user.dar;
u.restrict = user.restrict;
u.msgpost = user.msgpost;
u.posttoday = user.posttoday;
u.daten = user.daten;
u.gold = user.gold;
u.postnet = user.postnet;
}
//===================================================================
void convert_from()
{
// transfers my mailu info to your userrec structure
// BTW: WWIVMail/QWK only updates these fields, so the entire
// userrec doesn't need to be updated
user.waiting = u.waiting;
user.msgpost = u.msgpost,
user.posttoday = u.posttoday;
user.gold = u.gold;
user.postnet = u.postnet;
}
//===================================================================
void freshen_mailu_and_qscn
(
int *user_num
)
{
// reads from your userrec and updates the mailu/qsc information
unsigned long pos;
int userfile;
char line[MAXPATH];
// actually open the user file
sprintf(line, "%sUSER.LST", syscfg.datadir);
userfile = open(line, O_RDWR | O_BINARY);
pos = (syscfg.userreclen * (long)*user_num);
if (lseek(userfile, pos, SEEK_SET) != -1L) {
if (read(userfile, (void *)&user, syscfg.userreclen) > 0) {
convert_to();
Read_Qscn(*user_num);
} else
*user_num = 0;
}
// 0 = fail upon return
close(userfile);
}
//===================================================================
void read_user_info(int *user_num, char *cur_baud, char *com_speed)
{
// opens user file and chain.txt to get info for userrec
int advance;
char line[81];
FILE *chain;
// local mode
if(local){
if (export) {
// user_num is already set
ansi = 1;
} else if (import) {
*user_num = 1;
ansi = 1;
} else {
cout << "\n";
cout << "Please Enter User Number:";
gets(line);
*user_num = (int)atoi(line);
cout << "Do You Have Local ANSI ? (Y/N)";
gets(line);
// turn on/off ansi graphic output
if (strcmp(strupr(line),"Y") == 0)
ansi = 1;
else
ansi = 0;
}
strcpy(cur_baud, "KB");
strcpy(com_speed, "0");
// remote user
} else {
// line 1 of chain.txt has user number
chain = fopen("chain.txt", "r");
fgets(line, 80, chain);
*user_num = (int)atoi(line);
// skip on down to ansi support line
for(advance = 1; advance < 14; advance++)
fgets(line, 80, chain);
ansi = atoi(line);
// skip on down to current baud rate
for(advance = 1; advance < 7; advance++)
fgets(line, 80, chain);
strcpy(cur_baud, "");
strncat(cur_baud, line, strlen(line) - 1);
// skip on down to current com_speed
for(advance = 1; advance < 12; advance++)
fgets(line, 80, chain);
strcpy(com_speed, "");
strncat(com_speed, line, strlen(line) - 1);
fclose(chain);
}
freshen_mailu_and_qscn(user_num);
}
//===================================================================
void write_user(int user_num, char *main_dir, int clean)
{
// Open the user file and update the last read pointers
int userfile;
unsigned long pos;
char s[MAXPATH];
cd_to(main_dir);
// Deletes E-Mail and Updates Pointers
print_ansi(normal);
if ((nowrite == 0) && clean)
delmail(user_num);
convert_from();
sprintf(s, "%sUSER.LST",syscfg.datadir);
if ((userfile = open(s, O_RDWR | O_BINARY)) != -1) {
pos = (syscfg.userreclen * (long)user_num);
lseek(userfile, pos, SEEK_SET);
if (nowrite == 0)
write(userfile, (void *)&user, syscfg.userreclen);
close(userfile);
Write_Qscn(user_num);
Read_Qscn(user_num);
}
cd_to(syscfg.tempdir);
if (logoff)
carrier_dropped(main_dir);
}
//===================================================================
void user_ssm(int un)
{
// tells a user that he/she has one more piece of
// short message to read
char s[80];
int userfile;
unsigned long pos;
userrec tempuser;
sprintf(s, "%sUSER.LST", syscfg.datadir);
userfile = open(s, O_RDWR | O_BINARY);
if (userfile > 0) {
pos = (long)(syscfg.userreclen * un);
lseek(userfile, pos, SEEK_SET);
read(userfile, (void *)&tempuser, syscfg.userreclen);
if (nowrite == 0) {
lseek(userfile, pos, SEEK_SET);
tempuser.sysstatus |= sysstatus_smw;
write(userfile, (void *)&tempuser, syscfg.userreclen);
}
close(userfile);
}
}
//===================================================================
void user_import(int un)
{
// tells a user (local) that he/she has one more piece of
// e-mail to read
char s[MAXPATH];
int userfile;
unsigned long pos;
userrec tempuser;
sprintf(s, "%sUSER.LST", syscfg.datadir);
if ((userfile = open(s, O_RDWR | O_BINARY)) != -1) {
pos = (long)(syscfg.userreclen * un);
lseek(userfile, pos, SEEK_SET);
read(userfile, (void *)&tempuser, syscfg.userreclen);
lseek(userfile, pos, SEEK_SET);
if (nowrite == 0) {
tempuser.waiting++;
write(userfile, (void *)&tempuser, syscfg.userreclen);
}
close(userfile);
}
}
//===================================================================
void main(int argc, char *argv[])
{
// this is a stub for the REAL main() routine.
realmain(argc, argv);
}
//===================================================================